/*
 * jQuery JavaScript Library Marquee Plus 1.0
 * http://mzoe.com/
 *
 * Copyright (c) 2009 MZOE
 * Dual licensed under the MIT and GPL licenses.
 *
 * Date: 2009-05-13 18:54:21
 */
;(function($) {
    $.fn.marquee = function(o) {
        //获取滚动内容内各元素相关信息
        o = $.extend({
            speed:30, // 滚动速度
            step:1, // 滚动步长
            direction:'left', // 滚动方向
            pause: 0, // 停顿时长
            container:'ul',
            items : 'li'
        }, o || {});
        var dIndex = $.inArray(o.direction, ['right', 'down']);
        if (dIndex > -1) {
            o.direction = ['left', 'up'][dIndex];
            o.step = -o.step;
        }
        var mid;
        var div 		= $(this); // 容器对象
        var divWidth 	= div.innerWidth(); // 容器宽
        var divHeight 	= div.innerHeight(); // 容器高
        var ul 			= div.find(o.container);
        var li 			= ul.find(o.items);
        var liSize 		= li.size(); // 初始元素个数
        var liWidth 	= li.width(); // 元素宽
        var liHeight 	= li.height(); // 元素高
        var width 		= liWidth * liSize;
        var height 		= liHeight * liSize;
        div.height(liHeight);
        if ((o.direction === 'left' && width > divWidth) ||
            (o.direction === 'up' && height > divHeight)) {
            // 元素超出可显示范围才滚动
            if (o.direction === 'left') {
                ul.width(2 * liSize * liWidth);
                if (o.step < 0) div.scrollLeft(width);
            } else {
                ul.height(2 * liSize * liHeight);
                if (o.step < 0) div.scrollTop(height);
            }
            ul.append(li.clone()); // 复制元素
            mid = setInterval(_marquee, o.speed);
            div.hover(
                function(){clearInterval(mid);},
                function(){mid = setInterval(_marquee, o.speed);}
            );
        }
        function _marquee() {
            // 滚动
            if (o.direction === 'left') {
                var l = div.scrollLeft();
                if (o.step < 0) {
                    div.scrollLeft((l <= 0 ? width : l) + o.step);
                } else {
                    div.scrollLeft((l >= width ? 0 : l) + o.step);
                }
                if (l % liWidth === 0) _pause();
            } else {
                var t = div.scrollTop();
                if (o.step < 0) {
                    div.scrollTop((t <= 0 ? height : t) + o.step);
                } else {
                    div.scrollTop((t >= height ? 0 : t) + o.step);
                }
                if (t % liHeight === 0) _pause();
            }
        }
        function _pause() {
            // 停顿
            if (o.pause > 0) {
                var tempStep = o.step;
                o.step = 0;
                setTimeout(function() {
                    o.step = tempStep;
                }, o.pause);
            }
        }
    };
})(jQuery);